package com.liangdemo.web.redis;

import com.liangdemo.web.mapper.UserMapper;
import com.liangdemo.web.model.User;
import com.liangdemo.web.model.VM.UserVM;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;


/**
 * @author Mr.Liang
 * @date 2022/5/20 17:09
 */
@Service
public class UserRedisService {
    @Autowired
    private UserMapper userMapper;

    /**
     * 将方法的运行结果进行缓存
     * 几个属性：
     * cacheName/value：指定缓存的名字
     * key：缓存数据时，使用的key，默认使用方法参数的值
     * key可以用SpEl表达式来写
     * keyGenerator :key的生成器，可以自己指定key的生成器
     * key和keyGenerator（二选一使用）
     * cacheManger：指定缓存管理器
     * condition：指定符合条件的情况下，才缓存
     * unless:否定缓存，当为true时，方法返回值不缓存，可以获取到结果进行判断
     * sync:是否启动异步缓存
     * <p>
     * <p>
     * key = "#userid"是把入参，当作key存储，
     *
     * @param userid
     * @return
     */
    @Cacheable(value = "emp", key = "#userid", condition = "#userid != null")
    public UserVM getuser(String userid) {
        UserVM userVM = userMapper.Detailed(userid);
        return userVM;
    }

    @Cacheable(value = "user", key = "#id", condition = "#id != null")
    public User findById(String id) {
        return userMapper.selectById(id);
    }

    /**
     * 根据key清除缓存
     *
     * @param id
     */
    @CacheEvict(value = "user", key = "#id")
    public void update(String id) {

    }

    /**
     * 清楚全部缓存
     *
     * @param id
     */
    @CacheEvict(value = "user", allEntries = true)
    public void update1(String id) {

    }
}
